#ifndef _CONFIG_H_
#define _CONFIG_H_

#include <string>

#include <fstream>
#include <iostream>
#include <map>
#include <sstream>
#include <stdexcept>
#include <string>

using std::ifstream;
using std::map;
using std::string;

// class Configuration {
//   public:
//     Configuration(const string &filename);

//     // 获取指定配置项的值，返回字符串类型
//     string get(const string &section, const string &key) const;

//     // 打印map
//     void print() const;

//   private:
//     // 解析INI配置文件
//     void parseINI(const string &);

//   private:
//     // string = "section.key"
//     map<string, string> _configMap;
// };

// 单例模式
class Configuration {
  public:
    static Configuration *getInstance();
    static void deleteInstance();

    // 成员函数：方法
    void setConfigMap(const string &);
    string get(const string &section, const string &key) const;
    void print() const;

    // 删除拷贝和赋值
    Configuration &operator=(const Configuration &) = delete;
    Configuration(const Configuration &) = delete;

  private:
    Configuration();
    ~Configuration();

  private:
    map<string, string> _configMap;
    static Configuration *_instance;
};

#endif
